package algorithm.poj.p3000;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;


/**
 * 分析：
 * 如果N组数据两两比对，需要O(N^2)的时间，这里N=10^5，不可取。
 * 
 * 为了减少比较的次数，可以构造适当的HashMap，可以一遍完成比对。
 * 
 * 实现：
 * count[j] 保存到目前的数字为止，位j上是1个数的个数。
 * m是count[1..K]中的最小数
 * key = "#(count[1]-m)#(count[2]-m)...#(count[K]-m)"
 * 
 * 注意特殊情况:
 * 1. 如果数字是2^K-1，这样的一个数也是一个banlance。
 * 为此在最前面增加了一条特殊记录：
 * 			maps.put("#0#0..#0", -1)
 * 
 * 
 * 经验：
 * 1. JDK自带的HashMap效率太差，考虑自己实现一个
 * 
 * 教训：
 * 
 * @author wong.tong@gmail.com
 *
 */
public class P3274 {

	public static void main(String[] args) throws Exception {

		InputStream input = null;
		if (false) {
			input = System.in;
		} else {
			URL url = P3274.class.getResource("P3274.txt");
			File file = new File(URLDecoder.decode(url.getPath(), "UTF-8"));
			input = new FileInputStream(file);
		}
		
		BufferedReader stdin = new BufferedReader(new InputStreamReader(input));

		String line = stdin.readLine();
        String[] tmp = line.trim().split("\\s+");
		int N = Integer.valueOf(tmp[0]);
		int K = Integer.valueOf(tmp[1]);
		
		int[] bits = new int[K];	//用来方便位运算的数组
		bits[0] = 1;
		for (int i = 1; i < K; i ++) {
			bits[i] = bits[i-1]<<1;
		}
		
		int[] count = new int[K];	//计算当前位置，每个特征的数目
		int max = 0;	//最大的balance长度
		
		Map<String, Integer> maps = new HashMap<String, Integer>();
		//添加特殊记录
		String key = "";
		for (int j = 0; j < K; j ++) {
			key += "#0";
		}
		maps.put(key, -1);

		//开始加载数据并判断
//		long s = System.currentTimeMillis();
		for (int i = 0; i < N; i ++){
			line = stdin.readLine().trim();
			int n = Integer.valueOf(line);
			int m = Integer.MAX_VALUE;
			for (int j = 0; j < K; j ++) {
				if ((n & bits[j]) == bits[j]) {
					count[j] ++;
				}
				if (count[j] < m) {
					m = count[j];
				}
			}

			//use "StringBuffer.append" take the place of "String.+"
			StringBuffer sb = new StringBuffer("");
			for (int j = 0; j < K; j ++) {
				sb.append("#").append(count[j]-m);
			}
			key = sb.toString();

			Integer value = maps.get(key);
			if (value != null) {
				if (i - value > max) {
					max = i - value;
				}
			} else {
				maps.put(key, i);
			}
		}
		System.out.println(max);
//		System.out.println((System.currentTimeMillis()-s) + " ms");
	}
}
